type inputNumType = number | string;

export const fnNumberInput = (event: inputNumType = '', type: string = '', decimal: number = 2): string => {
    let value: string;
    if (type === 'integer') {
        // 整数
        value = inputNumZero(event);
    } else if (type === 'upInteger') {
        // 正整数
        value = inputNumNonZero(event);
    } else if (type === 'decimal') {
        // 小数 限制小数位数
        value = inputNumberReg(event, +decimal);
    } else {
        // 整数/小数
        value = inputNumberReg(event);
    }
    return value;
}

/**
 *  输入数字
 */
export const inputNumZero = (value: inputNumType) => {
    return inputNumberReg(value, 0);
}
/**
 *  输入正整数
 */
export const inputNumNonZero = (value: inputNumType) => {
    return inputNumberReg(value, 0, true);
}
/**
 * @param event input 值
 * @param decimal 可输入几位小数
 * @param nonzero 是否可以输入0 true：不可输入
 */
export const inputNumberReg = (event: number | string, decimal: number = -1, nonzero: boolean = false) => {
    let value: string = String(event);
    value = value.replace(/[^\d.]/g, ''); //清除"数字"和"."以外的字符
    value = value.replace(/^\./g, ''); //验证第一个字符是数字
    value = value.replace(/\.{2,}/g, '.'); //只保留第一个, 清除多余的
    value = value.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.');
    // value = value.replace(/[^\d.-]/g, ''); // 清除"数字"和"."以外的字符
    // value = value.replace(/^\-\./g, '-'); // 验证第一个字符是数字
    // value = value.replace(/(?!^)-/g, ''); // 清除数字非第一位的负号
    if (value.indexOf('.') < 0 && value !== '') {
        // 以上已经过滤，此处控制的是如果没有小数点，首位不能为类似于 01、02的金额
        value = String(parseFloat(value));
    }
    if (decimal >= 0) {
        if (decimal > 0) {
            // 小数
            let regDecimal: string = '';
            for (let i = 0; i < decimal; i++) {
                regDecimal = regDecimal + '\\d';
            }
            const regExp = new RegExp(`^(\\-)*(\\d+)\\.(${regDecimal}).*$`);
            value = value.replace(regExp, '$1$2.$3'); //只能输入两位小数
        } else {
            // 不支持小数
            value = value.replace(/^(\-)*(\d+)\.*$/, '$1$2'); // 不支持小数
            if (nonzero && (!value || value === '0' || value === '0.0' || value === '0.00')) {
                return '';
            }
            return parseInt(value) || parseInt(value) === 0 ? String(parseInt(value)) : '';
        }
    }
    return String(value);
}